<?php
/**
 * --------------------------------
 * # 配置类，继承 SPL 的 ArrayAccess 类
 * --------------------------------
 * 1. 2017
 * 2. \ArrayAccess 使对象如数组一样访问
 * 3. 注：此类使用详情查看 http://php.net/manual/zh/class.arrayaccess.php
 * --------------------------------
 */
namespace phpless\core;

class Config implements \ArrayAccess
{
    // 框架配置
    protected $phpless_config_path;
    // 项目配置
    protected $app_config_path;
    // 所有配置
    protected $configs=array();

    public function __construct()
    {
        // 框架配置文件
        $this->phpless_config_path=PHPLESS_CONFIG;
        // 项目配置文件
        $this->app_config_path=APP_CONFIG_PATH;
        // 获取框架配置目录所有配置文件 .config.php 获取所有配置文件
        $file_group = [];
        if(is_dir($this->phpless_config_path)){
            chdir($this->phpless_config_path);
            $files = glob('*.config.php');
            foreach($files as $k => $v){
                $file_group[] = $this->phpless_config_path.DIRECTORY_SEPARATOR.$v;
            }
        }
        // 获取应用配置目录所有配置文件 .config.php 获取所有配置文件
        if(is_dir($this->app_config_path)){
            chdir($this->app_config_path);
            $files = glob('*.config.php');
            foreach($files as $k => $v){
                $file_group[] = $this->app_config_path.DIRECTORY_SEPARATOR.$v;
            }
        }
        // 回到框架主目录
        chdir(APP);
        // 配置加载顺序：框架配置配置文件 -> 应用配置文件
        $all_configs = [];
        foreach ($file_group as $k => $v) {
            $file_config =  require $v;
            if(is_array($file_config) && !empty($file_config)){
                foreach ($file_config as $key => $value) {
                    $all_configs[$key] = $value;
                }
            }
        }
        $this->configs=$all_configs;
    }

    // 获取数组的 key
    public function offsetGet($key)
    {
        return isset($this->configs[$key])?$this->configs[$key]:null;
    }
    // 设置数组的 key
    public function offsetSet($key,$value=null)
    {
        if($this -> offsetExists($key)){
            $this -> configs[$key] = $value;
        }
        return isset($this->configs[$key])?$this->configs[$key]:null;
    }
    // 判断key是否存在
    public function offsetExists($key)
    {
        return isset($this->configs[$key]);
    }
    // 删除数据的key
    public function offsetUnset($key){}
}
